<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    /* 
    数组扁平化: 取出嵌套数组(多维)中的所有元素放到一个新数组(一维)中
      如: [1, [3, [2, 4]]]  ==>  [1, 3, 2, 4]

      [1, [2, 3], [4, [5, [6, 7]]]]
    */
    const arr = [1, [3, [2, [4, 5]]]]

    /* 
    使用递归: 数组的reduce + concat + some 
    */
    function flatten(arr) {
      return arr.reduce((pre, item) => {
        // 如果item是一个二维数组, 要先将其变为一维数组
        if (Array.isArray(item) && item.some(cItem => Array.isArray(cItem))) {
          item = flatten(item)
        }
        // item是一个非数组或一维数组
        return pre.concat(item)
      }, [])
    }
    // console.log(flatten(arr))

    
    

    function flatten2(arr) {

      while(arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr)
      }
      
      return arr
    }

    console.log(flatten2(arr));
    
  </script>
</body>
</html>